﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Follow.Business;
using Follow.Common;
using System.Windows.Forms;
namespace Follow.Cadastros
{
    public partial class Funcionario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["idUsuario"] == null)
            {
                Response.Redirect("../Default.aspx");
            }
            else
            {
                Common.ValidaPermissoes valida = new Common.ValidaPermissoes();
                bool possuiPermissao = valida.validaPermissaoPorTela("Funcionário", Convert.ToInt32(Session["idGrupoUsuario"]));

                if (possuiPermissao == false)
                {
                    Response.Redirect("../permissaoNegada.aspx");
                }

                if (Request["Msg"] != null)
                {

                    divMsg1.Visible = true;
                    divMsg1.Attributes["class"] = "isa_info";
                    lblMsg1.Text = Request["Msg"].ToString();
                }

                this.PopulaFuncionariosByName();
            }
        }

        //private void PopulaFuncionarios()
        //{
        //    lblMsgGridFuncionarios.Visible = false;
        //    FuncionarioBO bo = new FuncionarioBO();
        //    gvFuncionarios.DataSource = bo.findAll();
        //    gvFuncionarios.DataBind();
        //    if (gvFuncionarios.Rows.Count == 0)
        //        lblMsgGridFuncionarios.Visible = true;
        //}

        private void PopulaMetasFuncionarios(int func)
        {
            lblMsgGridMetas.Visible = false;
            MetaFuncionarioBO bo = new MetaFuncionarioBO();
            gvMetas.DataSource = bo.findByFuncionario(func);
            gvMetas.DataBind();
            if (gvMetas.Rows.Count == 0)
                lblMsgGridMetas.Visible = true;
        }

        private void PopulaFuncionariosByName()
        {
            lblMsgGridFuncionarios.Visible = false;
            Boolean ativo = !ckbPesquisa.Checked;
            FuncionarioBO bo = new FuncionarioBO();
            gvFuncionarios.DataSource = (ativo == false) ? bo.findByName(txtPesquisa.Text) : bo.findByName(txtPesquisa.Text, ativo);
            gvFuncionarios.DataBind();
            if (gvFuncionarios.Rows.Count == 0)
                lblMsgGridFuncionarios.Visible = true;
        }

        private void PopulaUsuarios()
        {
            UsuarioBO bo = new UsuarioBO();
            ddlUsuario.DataSource = bo.findAll();
            ddlUsuario.DataValueField = "idusuario";
            ddlUsuario.DataTextField = "nome";
            ddlUsuario.DataBind();
            ddlUsuario.Items.Insert(0, new ListItem("Selecione...", "0"));
        }

        private void PopulaMetas()
        {
            MetaBO bo = new MetaBO();
            ddlMeta.DataSource = bo.findAll();
            ddlMeta.DataValueField = "idmeta";
            ddlMeta.DataTextField = "nome";
            ddlMeta.DataBind();
        }


        protected void btnPesquisa_Click(object sender, EventArgs e)
        {
            divMsg1.Visible = false;
            this.PopulaFuncionariosByName();
        }

        

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                Model.Funcionario f = new Model.Funcionario();
                FuncionarioBO bo = new FuncionarioBO();
                if (IDFuncionario.Value != "")
                {
                    f.IDFuncionario = Int32.Parse(IDFuncionario.Value);

                }
                f.Nome = txtNome.Text;
                f.Cpf = txtCpf.Text;
                f.Rg = txtRg.Text;
                f.DataNasc = Convert.ToDateTime(txtDataNasc.Text);
                f.Endereco = txtEnd.Text;
                f.Tel1 = txtTel1.Text;
                f.Tel2 = txtTel2.Text;
                f.Tel3 = txtTel3.Text;
                f.IDUsuario = Convert.ToInt32(ddlUsuario.SelectedValue);
                f.TipoFunc = (ckbTipoFunc.Checked == true) ? true : false;
                f.Ativo = (ckbAtivo.Checked == true) ? true : false;

                Common.ValidarCPFCNPJ validador = new Common.ValidarCPFCNPJ();
                bool cpfvalido = validador.IsCpf(f.Cpf);

                if (cpfvalido == true)
                {
                    bo.save(f, Convert.ToInt32(Session["idGrupoUsuario"]));
                    divMsg1.Visible = true;
                    divMsg1.Attributes["class"] = "isa_success";
                    lblMsg1.Text = "Funcionário salvo com sucesso!";
                    mvFuncionarios.ActiveViewIndex = 0;
                    PopulaFuncionariosByName();
                    
                }

                else if (cpfvalido == false)
                {
                    divMsg2.Visible = true;
                    divMsg2.Attributes["class"] = "isa_error";
                    lblMsg2.Text = "CPF inválido";
                }
            
            }
            catch (Exception ex)
            {
                divMsg2.Visible = true;
                if (ex.Message.Equals("usuário inválido"))
                {
                    divMsg2.Attributes["class"] = "isa_warning";
                    lblMsg2.Text = "Faltou selecionar o Usuário relacionado a este cadastro.";
                }
                else if (ex.Message.IndexOf("duplicate") > -1)
                {
                    divMsg2.Attributes["class"] = "isa_warning";
                    lblMsg2.Text = "Funcionário já cadastrado no sistema";
                }
                else
                {
                    divMsg2.Attributes["class"] = "isa_error";
                    lblMsg2.Text = "Erro: " + ex.Message;
                }
            }
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            LimparCampos();
            mvFuncionarios.ActiveViewIndex = 0;
        }

        protected void gvFuncionarios_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("Editar"))
            {
                Int32 id = Convert.ToInt32(this.gvFuncionarios.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);

                if (id != null)
                {
                    if (id > 0)
                    {
                        FuncionarioBO bo = new FuncionarioBO();
                        Model.Funcionario f = bo.load(id);
                        txtNome.Text = f.Nome;
                        txtCpf.Text = Convert.ToString(f.Cpf);
                        txtRg.Text = f.Rg;
                        txtDataNasc.Text = f.DataNasc.ToShortDateString();
                        txtEnd.Text = f.Endereco;
                        txtTel1.Text = f.Tel1;
                        txtTel2.Text = f.Tel2;
                        txtTel3.Text = f.Tel3;
                        ckbTipoFunc.Checked = (f.TipoFunc == true) ? true : false;
                        ckbAtivo.Checked = (f.Ativo == true) ? true : false;
                        ddlUsuario.SelectedValue = f.IDUsuario.ToString();
                        IDFuncionario.Value = f.IDFuncionario.ToString();
                        PopulaUsuarios();
                        divMsg2.Visible = false;
                        mvFuncionarios.ActiveViewIndex = 1;
                    }
                }
            }
            else if (e.CommandName.Equals("Excluir"))
            {
                if (System.Windows.Forms.MessageBox.Show("Tem certeza que deseja excluir?", "Excluir", MessageBoxButtons.OKCancel,
                    MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) ==
                    System.Windows.Forms.DialogResult.OK)
                {
                    Int32 id = 0;
                    try
                    {
                        id = Convert.ToInt32(this.gvFuncionarios.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    }
                    catch (Exception ex)
                    {
                        divMsg1.Visible = true;
                        divMsg1.Attributes["class"] = "isa_error";
                        lblMsg1.Text = "Erro: " + ex.Message;
                    }
                    FuncionarioBO bo = new FuncionarioBO();
                    try
                    {
                        bo.delete(id, Convert.ToInt32(Session["idGrupoUsuario"]));
                        PopulaFuncionariosByName();
                        divMsg1.Visible = true;
                        divMsg1.Attributes["class"] = "isa_success";
                        lblMsg1.Text = "Funcionário excluído com sucesso!";
                    }
                    catch (Exception ex)
                    {
                        divMsg1.Visible = true;
                        divMsg1.Attributes["class"] = "isa_error";
                        lblMsg1.Text = "Erro: " + ex.Message;
                    }
                }
            }

            else if (e.CommandName.Equals("Associar"))
            {
                Int32 id = Convert.ToInt32(this.gvFuncionarios.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);

                if (id != null)
                {
                    if (id > 0)
                    {
                        lblMsg3.Visible = false;
                        FuncionarioBO bo = new FuncionarioBO();
                        Model.Funcionario f = bo.load(id);
                        IDFuncionario3.Value = Convert.ToString(f.IDFuncionario);
                        txtFuncionario.Text = f.Nome;           
                        lblTituloView3.Text = "Associação de metas para: " + f.Nome;
                        PopulaMetas();
                        PopulaMetasFuncionarios(id);
                        mvFuncionarios.ActiveViewIndex = 2;
                        divMsg3.Visible = false;
                    }
                }
            }           
        }

        protected void btnIncluir_Click(object sender, EventArgs e)
        {
            LimparCampos();
            mvFuncionarios.ActiveViewIndex = 1;
        }

        protected void gvFuncionarios_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void ckbPesquisa_CheckedChanged(object sender, EventArgs e)
        {
            this.PopulaFuncionariosByName();
        }

        protected void btnSalvarMeta_Click(object sender, EventArgs e)
        {
            try
            {
                Model.MetaFuncionario mf = new Model.MetaFuncionario();
                MetaFuncionarioBO bo = new MetaFuncionarioBO();
                mf.IDFuncionario = Convert.ToInt32(IDFuncionario3.Value);
                mf.IDMeta = Convert.ToInt32(ddlMeta.SelectedValue);
                mf.DataInicial = Convert.ToDateTime(txtDataInicial.Text);
                mf.DataFinal = Convert.ToDateTime(txtDataFinal.Text);
                mf.Quantidade = Convert.ToDecimal(txtQuantidade.Text);
                bo.insert(mf, Convert.ToInt32(Session["idUsuario"]));
                PopulaMetasFuncionarios(Convert.ToInt32(IDFuncionario3.Value));
                mvFuncionarios.ActiveViewIndex = 1;
                divMsg2.Visible = true;
                divMsg2.Attributes["class"] = "isa_success";
                lblMsg2.Text = "Meta associada com sucesso!";
            }
            catch (Exception ex)
            {
                divMsg3.Visible = true;
                if (ex.Message.IndexOf("duplicate") > -1)
                {
                    divMsg3.Attributes["class"] = "isa_warning";
                    lblMsg3.Text = "Meta já associada para esse funcionário";
                }
                else
                {
                    divMsg3.Attributes["class"] = "isa_error";
                    lblMsg3.Text = "Erro: " + ex.Message;
                }
            }
        }

        protected void LimparCampos()
        {
            divMsg1.Visible = false;
            divMsg2.Visible = false;
            ckbTipoFunc.Checked = false;
            txtNome.Text = "";
            txtCpf.Text = "";
            txtRg.Text = "";
            txtDataNasc.Text = "";
            txtEnd.Text = "";
            txtTel1.Text = "";
            txtTel2.Text = "";
            txtTel3.Text = "";
            ckbAtivo.Checked = true;
            PopulaUsuarios();

        }

        protected void btnVoltarMeta_Click(object sender, EventArgs e)
        {
            mvFuncionarios.ActiveViewIndex = 0;
        }

        protected void gvMetas_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void gvMetas_RowCommand(object sender, GridViewCommandEventArgs e)
        {

            if (e.CommandName.Equals("Excluir"))
            {
                if (System.Windows.Forms.MessageBox.Show("Tem certeza que deseja excluir?", "Delete", MessageBoxButtons.OKCancel, 
                    MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) == 
                    System.Windows.Forms.DialogResult.OK)
                {
                    Int32 id = 0;
                    try
                    {
                        id = Convert.ToInt32(this.gvMetas.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    }
                    catch (Exception ex)
                    {
                        divMsg3.Visible = true;
                        divMsg3.Attributes["class"] = "isa_error";
                        lblMsg3.Text = "Erro: " + ex.Message;
                        return;
                    }
                    MetaFuncionarioBO bo = new MetaFuncionarioBO();
                    try
                    {
                        bo.delete(id, Convert.ToInt32(Session["idUsuario"]));
                        PopulaMetasFuncionarios(Convert.ToInt32(IDFuncionario3.Value));
                        divMsg3.Visible = true;
                        divMsg3.Attributes["class"] = "isa_success";
                        lblMsg3.Text = "Meta associada a funcionário excluída com sucesso!";
                    }
                    catch (Exception ex)
                    {
                        divMsg3.Visible = true;
                        divMsg3.Attributes["class"] = "isa_error";
                        lblMsg3.Text = "Erro: " + ex.Message;
                    }
                }
            }
        }
        protected void gvFuncionarios_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvFuncionarios.PageIndex = e.NewPageIndex;
            gvFuncionarios.DataBind();
            PopulaFuncionariosByName();
        }
        
    }
}